In many storage systems, it is desirable to generate periodic snapshots of storage volumes. A given such snapshot illustratively represents a point-in-time replica of a particular storage volume of the storage system. Such snapshots are commonly used in a wide variety of different data protection scenarios. For example, periodic snapshots are created in a storage system in order to enable users to recover from data corruption by restoring one or more storage volumes using a previous point-in-time replica. As another example, snapshots may be used in conjunction with synchronous or asynchronous replication of data from a storage system at one site to a storage system at another site, in order to support disaster recovery functionality. Conventional snapshot generation arrangements typically involve the use of a snapshot scheduler that is configured to create periodic snapshots at fixed intervals, following a predetermined schedule. For example, the snapshot scheduler can cause a snapshot of a given storage volume to be created every hour, or at a particular time every day. However, if the intervals are too short, such that snapshots are taken more frequently than needed, substantial amounts of computational and memory resources of the storage system are wasted. It is also possible that the intervals may be too long, such that snapshots are taken less frequently than needed, undermining the data protection provided by the storage system.